﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using QuanCafe_DAO_WS;

namespace QuanCafe
{
    public class ThucUongDuocDatDAO : DataProvider
    {

        // viết hàm lấy lên danh sách thức uống đang được đặt
        public List<ThucUongDuocDatDTO> TUDD_LayDanhSachThucUong(string maphieu)
        {
            // tạo 1 biến linq
            LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
            // lấy ra những thức uống được đặt
            var thucUongDuocDats = data.ThucUongDuocDats.Where(temp => temp.maphieu == maphieu).OrderBy(temp => temp.mathucuong);
            // tạo 1 đối tượng List để trả về
            List<ThucUongDuocDatDTO> thucUongDuocDatDTOs = new List<ThucUongDuocDatDTO>();

            // truy vấn
            foreach (ThucUongDuocDat thucUong in thucUongDuocDats)
            {
                object obj = GetDataFromDataContext(thucUong);
                thucUongDuocDatDTOs.Add((ThucUongDuocDatDTO)obj);
            }
            return thucUongDuocDatDTOs;
            

        }

        // viết hàm lấy số lượng thức uống của một phiếu đặt
        public int TUDD_LaySoLuongThucUong(string maphieu)
        {
            try
            {
                // tạo 1 biến linq
                LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
                // lấy ra những thức uống được đặt
                var thucUongDuocDats = data.ThucUongDuocDats.Where(temp => temp.maphieu == maphieu);

                // trả về số lượng
                return thucUongDuocDats.Count();
            }
            catch
            {
                return -1;
            }
            
        }

        // viết hàm nhận lên 1 thức uống
        public bool TUDD_UploadThucUong(string maphieu, string mathucuong, string tenthucuong, int soluong, int tinhtrang, float dongia)
        {
            try
            {
                LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
                // kiểm tra xem maphieu có tồn tại chưa
                if (TUDD_MuonCapNhatThucUong(maphieu, mathucuong) == true) // nghĩa là cập nhật
                {
                    // xử lý cập nhật
                    // lấy ra thức uống với mã đã cho
                    ThucUongDuocDat tu_duocdat = data.ThucUongDuocDats.Single(temp => temp.maphieu == maphieu && temp.mathucuong == mathucuong);
                    // cập nhật thông tin lại
                    tu_duocdat.tenthucuong = tenthucuong;
                    tu_duocdat.soluong = soluong;
                    tu_duocdat.dongia = dongia;
                    tu_duocdat.tinhtrang = tinhtrang;
                    data.SubmitChanges();
                    return true;
                }
                else // thêm mới
                { 
                    // tạo ra 1 lớp thưcuongduocdat
                    ThucUongDuocDat tu_duocdat = new ThucUongDuocDat();
                    // thêm vào
                    tu_duocdat.maphieu = maphieu;
                    tu_duocdat.mathucuong = mathucuong;
                    tu_duocdat.tenthucuong = tenthucuong;
                    tu_duocdat.dongia = dongia;
                    tu_duocdat.soluong = soluong;
                    tu_duocdat.tinhtrang = tinhtrang;
                    // cập nhật
                    data.ThucUongDuocDats.InsertOnSubmit(tu_duocdat);
                    data.SubmitChanges();
                    return true;
                }
                
            }
            catch
            {
                return false;
            }
        }

        // viết hàm cập nhật 1 thức uống đang được đặt
        public bool TUDD_CapNhatTinhTrangThucUong(string maphieu, string mathucuong, int tinhtrang)
        {
            try
            {
                LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
                // kiểm tra xem maphieu có tồn tại chưa
                if (TUDD_MuonCapNhatThucUong(maphieu, mathucuong) == true) // nghĩa là cập nhật
                {
                    // xử lý cập nhật
                    // lấy ra thức uống với mã đã cho
                    ThucUongDuocDat tu_duocdat = data.ThucUongDuocDats.Single(temp => temp.maphieu == maphieu && temp.mathucuong == mathucuong);
                    // cập nhật thông tin lại
                    tu_duocdat.tinhtrang = tinhtrang;
                    data.SubmitChanges();
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch
            {
                return false;
            }
        }

        // viết hàm cập nhật số lượng thức uống
        public bool TUDD_CapNhatSoLuongThucUong(string maphieu, string mathucuong, int soluong)
        {
            try
            {
                LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
                // kiểm tra xem maphieu có tồn tại chưa
                if (TUDD_MuonCapNhatThucUong(maphieu, mathucuong) == true) // nghĩa là cập nhật
                {
                    // xử lý cập nhật
                    // lấy ra thức uống với mã đã cho
                    ThucUongDuocDat tu_duocdat = data.ThucUongDuocDats.Single(temp => temp.maphieu == maphieu && temp.mathucuong == mathucuong);
                    // cập nhật thông tin lại
                    tu_duocdat.soluong = soluong;
                    data.SubmitChanges();
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch
            {
                return false;
            }
        }

        // viết hàm xóa thức uống được đặt
        public bool TUDD_XoaThucUong(string maphieu, string mathucuong)
        {
            try
            {
                LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
                // kiểm tra xem maphieu có tồn tại chưa
                if (TUDD_MuonCapNhatThucUong(maphieu, mathucuong) == true) // có thức uống
                {
                    // xử lý xóa
                    // lấy ra thức uống với mã đã cho
                    ThucUongDuocDat tu_duocdat = data.ThucUongDuocDats.Single(temp => temp.maphieu == maphieu && temp.mathucuong == mathucuong);
                    // xóa nó đi
                    data.ThucUongDuocDats.DeleteOnSubmit(tu_duocdat);
                    data.SubmitChanges();
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch
            {
                return false;
            }
        }

        // viết hàm kiểm tra mã phiếu đã tồn tại hay chưa
        public bool TUDD_MuonCapNhatThucUong(string maphieu, string mathucuong)
        { 
            // tạo ra 1 biến data
            LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
            // lấy ra danh sách các mã phiếu được đặt
            var phieudat_thucuong = data.ThucUongDuocDats.Where(temp => true);
            // kiểm tra
            // kiểm tra: Any(điều kiện): có bất kì phần tử nào thỏa không?
            if (phieudat_thucuong.Any(temp => (temp.maphieu == maphieu && temp.mathucuong == mathucuong)))
            {
                return true;
            }
            else
            {
                return false;
            }
        }


        // viết hàm xóa những thức uống của 1 phiếu đặt
        public bool TUDD_XoaThucUongCuaPhieuDat(string maphieu)
        {
            try
            {
                LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
                // kiểm tra xem maphieu có tồn tại chưa
                if (TUDD_DaTonTaiMaPhieuDat(maphieu) == true) // có thức uống
                {
                    // xử lý xóa
                    // lấy ra thức uống của phiếu đặt này
                    var  tu_duocdat = data.ThucUongDuocDats.Where(temp => temp.maphieu == maphieu );
                    // xóa nó đi
                    data.ThucUongDuocDats.DeleteAllOnSubmit(tu_duocdat);
                    data.SubmitChanges();
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch
            {
                return false;
            }
        }

        // viết hàm kiểm tra mã phiếu đặt có tồn tại ko
        public bool TUDD_DaTonTaiMaPhieuDat(string maphieu)
        {
            // tạo ra 1 biến data
            LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
            // lấy ra danh sách các mã phiếu được đặt
            var phieudat_thucuong = data.ThucUongDuocDats.Where(temp => true);
            // kiểm tra
            // kiểm tra: Any(điều kiện): có bất kì phần tử nào thỏa không?
            if (phieudat_thucuong.Any(temp => (temp.maphieu == maphieu)))
            {
                return true;
            }
            else
            {
                return false;
            }
        }


        // viết lại hàm GetDataFromDataRow
        protected  object GetDataFromDataContext(ThucUongDuocDat tu)
        {
            ThucUongDuocDatDTO thucUongDuocDatDTO = new ThucUongDuocDatDTO();

            thucUongDuocDatDTO.Maphieu = tu.maphieu;
            thucUongDuocDatDTO.Mathucuong = tu.mathucuong;
            thucUongDuocDatDTO.Tenthucuong = tu.tenthucuong;
            thucUongDuocDatDTO.Tinhtrang = (int)tu.tinhtrang;
            thucUongDuocDatDTO.Dongia = (float)tu.dongia;
            thucUongDuocDatDTO.Soluong = (float)tu.soluong;

            // trả về kiểu object
            return (object)thucUongDuocDatDTO;

        }

    }
}
